﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EvincePayroll.Data;
using EvincePayroll.Utility;

namespace EvincePayroll.Communication.Database
{
    public interface IDatabaseRepository
    {
        /// <summary>
        ///  Employee related interfaces
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
     //   EmployeeData GetUser(Guid userId);
       // EmployeeData GetUser(string userId);
    //    bool AuthenticateLogin(string emailId, string password);
     //   bool AuthenticateEmail(string emailId);
     //   bool Logout(string emailId, string password);
    //    List<EmployeeData> RegisterEmployee(EmployeeData employeeData);
     //   bool CheckExistingUser(string emailId);
     //   List<EmployeeData> GetEmployeeList(string emailId);
     //   List<EmployeeData> GetEmployeeListForActivation(string emailId);
      //  List<EmployeeLeaveRequestData> LeaveRequestsEmployee(EmployeeLeaveRequestData employeeLeaveRequestData, string emailId);
        /// <summary>
        ///  Leave Request related interfaces
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>

      //  List<EmployeeData> GetLeaveRequestsEmployeeData(string emailId, string userRole);
       // List<EmployeeLeaveRequestData> LeaveRequestsAdmin();
       // bool UpdateLeaveRequestStatus(string leaveRequestId, string status, string message, string numberOfDays, string fromDate, string flag);

        /// <summary>
        ///  Attendance related interfaces
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>

    //    List<AttendanceData> GetAttendanceAdmin(string emailId, string date);


  //      List<EmployeeLeaveRequestData> GetRequestEmployee(string emailId, string status);
       // bool AddData(EmployeeLeaveRequestData employeeLeaveRequest, string emailId);
    //    bool UpdateData(EmployeeLeaveRequestData employeeLeaveRequest, Guid Id, string emailId);
     //   List<AppOptionData> getStatus(string emailId);
     //   string DeleteData(int id, string emailId);
     //   bool MarkAubsent();
      //  bool CheckOut(string emailId, string reason);
    //    bool CheckIn(string emailId);
    //    bool updateEmployee(Guid id, int active, Guid role, string email);
        //List<UserRoleData> GetUserRoleList(string email);
     //   bool GetUpdatedUserProfile(EmployeeData emdata, string email);
    //    bool GetUpdatePassword(EmployeeData empdata, string email);

        /// <summary>
        /// Page Template related methods
        /// </summary>
        /// <param name="email"></param>
        /// <returns></returns>

      //  PageTemplateData GetPageTemplate(string pageId);
       // List<PageTemplateData> GetPageTemplateList();
      //  List<PageTemplateData> GetAllPageList();

        /// <summary>
        /// Experience related methods
        /// </summary>
        /// <param name="email"></param>
        /// <returns></returns>
        /// 
      //  bool DeleteGalleryImage(string imageId);
     //   bool UpdateGalleryImage(string imageId,string status);
     //   bool AddGalleryPage(GalleryData gallery);
      //  List<ParentChildData> GetParentChild();
    //    List<ExperienceData> GetExperinceByUserId(string employeeId);
      //  List<ExperienceData> GetUserExperince(string email);
   //     bool AddYourExperince(ExperienceData experinceData, string email, string flag, string experinceId);
   //     List<AppOptionData> GetAppOption(string email, string key);
   //     bool DeleteExperience(string experienceId, string email);
      //  ExperienceData EditExperience(string experienceId, string email);
     //   bool AddPage(PageTemplateData page, string email,string PageID);
      //  bool DeleteCMS(string pageId);
      //  List<GalleryData> GetGallary(bool flag);
      
        
        // List<AttendanceLogData> ShowAttendanceDetail(string email, string attendanceId);
     //   bool CreateRole(string email, string RoleName);
     //   List<UserRoleData> GetAllUserRole(string email);
      //  bool DeleteRole(string userId);

      //  List<EmployeeData> GetOnlineUsers(string emailId);
        
        
        //AppOption Interface
        bool CreateAppOption(AppOptionData appOptionData);
        List<AppOptionData> GetAppOptionDataList();
        bool DeleteAppOption(string paramId);
        bool UpdateAppOption(AppOptionData appOptionData);
        AppOptionData GetAppOptionDataByParamId(string paramId);

        //Attendance Interface
        bool CreateAttendance(AttendanceData attendanceData);
        List<AttendanceData> GetAttendanceDataList();
        bool DeleteAttendance(string attendanceId);
        bool UpdateAttendance(AttendanceData attendanceData);
        AttendanceData GetAttendanceDataByAttendanceId(string attendanceId);

        //AttendanceLog Interface
        bool CreateAttendanceLog(AttendanceLogData attendanceLogData);
        List<AttendanceLogData> GetAttendanceLogDataList();
        bool DeleteAttendanceLog(string attendanceLogId);
        bool UpdateAttendanceLog(AttendanceLogData attendanceLogData);
        AttendanceLogData GetAttendanceLogDataByAttendanceLogId(string attendanceLogId);

        //Employee Interface
        bool CreateEmployee(EmployeeData employeeData);
        List<EmployeeData> GetEmployeeDataList();
        bool DeleteEmployee(string employeeId);
        bool UpdateEmployee(EmployeeData employeeData);
        EmployeeData GetEmployeeDataByEmployeeId(string employeeId);

        //EmployeeLeaveRequest Interface
        bool CreateEmployeeLeaveRequest(EmployeeLeaveRequestData employeeLeaveRequestData);
        List<EmployeeLeaveRequestData> GetEmployeeLeaveRequestDataList();
        bool DeleteEmployeeLeaveRequest(string leaveId);
        bool UpdateEmployeeLeaveRequest(EmployeeLeaveRequestData employeeLeaveRequestData);
        EmployeeLeaveRequestData GetEmployeeLeaveRequestDataByLeaveId(string leaveId);

        //Experience Interface
        bool CreateExperince(ExperienceData experinceData);
        bool UpdateExperince(ExperienceData experinceData);
        bool DeleteExperince(string experienceId);
        ExperienceData GetExperinceDataById(string experinceId);
        List<ExperienceData> GetExperienceDataList();

        //Gallery Interface
        bool InsertGallery(GalleryData galleryData);
        bool UpdateGallery(GalleryData galleryData);
        bool DeleteGallery(string imageId);
        GalleryData GetGalleryDataById(string imageId);
        List<GalleryData> GetGalleryDataList();

        //PageTemplate Interface
        bool InsertPageTemplate(PageTemplateData pageTemplateData);
        bool UpdatePageTemplate(PageTemplateData pageTemplateData);
        bool DeletePageTemplate(string pageId);
        PageTemplateData GetPageTemplateDataById(string pageId);
        List<PageTemplateData> GetPageTemplateDataList();

        //UserRole Interface
        bool InsertUserRole(UserRoleData userRoleData);
        bool UpdateUserRole(UserRoleData userRoleData);
        bool DeleteUserRole(string userRoleId);
        UserRoleData GetUserRoleDataById(string userRoleId);
        List<UserRoleData> GetUserRoleDataList();

        //MenuTable Interface
        bool CreateMenuTable(MenuTableData menuTableData);
        List<MenuTableData> GetMenuTableDataList();
        bool DeleteMenuItem(string menuId);
        bool UpdateMenuTable(MenuTableData menuTableData);
        MenuTableData GetMenuTableDataByParamId(string menuId);

        //RoleMenuManager Interface
        bool CreateRoleMenuManager(RoleMenuManagerData roleMenuManagerData);
        List<RoleMenuManagerData> GetRoleMenuManagerDataList();
        bool DeleteRoleMenuManager(string roleMenuManagerId);
        bool UpdateRoleMenuManager(RoleMenuManagerData roleMenuManagerData);
        RoleMenuManagerData GetRoleMenuManagerDataByParamId(string roleMenuManagerId);

        //LeaveMaster Interface
        bool CreateLeave(LeaveMasterData leaveMasterData);
        List<LeaveMasterData> GetLeaveMasterDataList();
        bool DeleteLeaveMaster(string leaveMasterId);
        bool UpdateLeaveMaster(LeaveMasterData leaveMasterData);
        LeaveMasterData GetLeaveMasterDataByParamId(string leaveMasterId);

        //EmployeeLeaveMaster Interface
        bool CreateEmployeeLeave(EmployeeLeaveMasterData employeeLeaveMasterData);
        List<EmployeeLeaveMasterData> GetEmployeeLeaveMasterDataList();
        bool DeleteEmployeeLeaveMaster(string employeeLeaveMasterId);
        bool UpdateEmployeeLeaveMaster(EmployeeLeaveMasterData employeeLeaveMasterData);
        EmployeeLeaveMasterData GetEmployeeLeaveMasterDataByParamId(string employeeLeaveMasterId);
    }
}
